// pages/text_AI/text_AI.ts

import { AIService } from '../../utils/ai-service';

/**
 * 题目信息接口
 */
interface QuestionData {
  questionId: number;
  questionText: string;
  userAnswer: string;
  correctAnswer: string;
  userAnswerText: string;
  correctAnswerText: string;
  isCorrect: boolean;
}

/**
 * AI解释页面
 */
Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 题目信息
    questionData: null as QuestionData | null,
    
    // AI服务
    aiService: null as AIService | null,
    
    // AI解释相关
    aiLoading: false, // AI是否正在加载
    aiExplanation: '', // AI解释内容
    hasExplanation: false, // 是否已有解释
    
    // 错误信息
    errorMessage: '',
    showError: false,
    
    // 页面状态
    pageReady: false
  },

  /**
   * 生命周期函数--监听页面加载
   * @param options 页面参数
   */
  onLoad(options: any) {
    console.log('AI解释页面加载，参数:', options);
    
    // 初始化AI服务
    this.data.aiService = new AIService();
    
    // 获取题目数据
    this.loadQuestionData(options);
  },

  /**
   * 加载题目数据
   * @param options 页面参数
   */
  loadQuestionData(options: any) {
    try {
      // 从页面参数获取题目数据
      if (options.questionData) {
        const questionData = JSON.parse(decodeURIComponent(options.questionData));
        this.setData({
          questionData: questionData,
          pageReady: true
        });
        
        // 设置页面标题
        wx.setNavigationBarTitle({
          title: `第${questionData.questionIndex || ''}题 - AI解释`
        });
        
        console.log('题目数据加载成功:', questionData);
      } else {
        // 从全局数据获取
        const app = getApp<IAppOption>();
        const currentQuestion = (app as any).currentAIQuestion;
        
        if (currentQuestion) {
          this.setData({
            questionData: currentQuestion,
            pageReady: true
          });
        } else {
          this.showErrorMessage('没有找到题目数据');
        }
      }
    } catch (error) {
      console.error('加载题目数据失败:', error);
      this.showErrorMessage('题目数据格式错误');
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    console.log('AI解释页面渲染完成');
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 如果页面已准备好且没有解释，自动获取AI解释
    if (this.data.pageReady && !this.data.hasExplanation && !this.data.aiLoading) {
      this.getAIExplanation();
    }
  },

  /**
   * 获取AI解释
   */
  async getAIExplanation() {
    const { questionData, aiService } = this.data;
    
    if (!questionData || !aiService) {
      this.showErrorMessage('无法获取题目数据或AI服务');
      return;
    }

    // 设置加载状态
    this.setData({
      aiLoading: true,
      showError: false,
      errorMessage: ''
    });

    try {
      console.log('开始获取AI解释...');
      
      // 调用AI服务
      const response = await aiService.explainQuestion({
        questionText: questionData.questionText,
        userAnswer: questionData.userAnswer,
        correctAnswer: questionData.correctAnswer,
        userAnswerText: questionData.userAnswerText,
        correctAnswerText: questionData.correctAnswerText
      });

      if (response.success) {
        this.setData({
          aiLoading: false,
          aiExplanation: response.content,
          hasExplanation: true
        });
        
        console.log('AI解释获取成功');
        
        // 显示成功提示
        wx.showToast({
          title: 'AI解释获取成功',
          icon: 'success',
          duration: 1500
        });
      } else {
        throw new Error(response.error || '获取AI解释失败');
      }
    } catch (error) {
      console.error('获取AI解释失败:', error);
      
      this.setData({
        aiLoading: false,
        hasExplanation: false
      });
      
      const errorMsg = error instanceof Error ? error.message : '未知错误';
      this.showErrorMessage(`获取AI解释失败: ${errorMsg}`);
    }
  },

  /**
   * 重新获取AI解释
   */
  retryAIExplanation() {
    this.setData({
      hasExplanation: false,
      aiExplanation: '',
      showError: false
    });
    
    this.getAIExplanation();
  },

  /**
   * 显示错误信息
   * @param message 错误信息
   */
  showErrorMessage(message: string) {
    this.setData({
      errorMessage: message,
      showError: true
    });
    
    wx.showToast({
      title: message,
      icon: 'none',
      duration: 3000
    });
  },

  /**
   * 关闭错误提示
   */
  closeError() {
    this.setData({
      showError: false,
      errorMessage: ''
    });
  },

  /**
   * 分享AI解释
   */
  shareExplanation() {
    const { questionData, aiExplanation } = this.data;
    
    if (!questionData || !aiExplanation) {
      wx.showToast({
        title: '没有可分享的内容',
        icon: 'none'
      });
      return;
    }

    const shareContent = `📚 AI智能解释\n\n题目：${questionData.questionText}\n\n${aiExplanation}`;
    
    wx.setClipboardData({
      data: shareContent,
      success: () => {
        wx.showToast({
          title: '已复制到剪贴板',
          icon: 'success'
        });
      },
      fail: () => {
        wx.showToast({
          title: '复制失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 返回上一页
   */
  goBack() {
    wx.navigateBack({
      delta: 1
    });
  },

  /**
   * 返回首页
   */
  goHome() {
    wx.reLaunch({
      url: '/pages/index/index'
    });
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    // 下拉刷新重新获取AI解释
    this.retryAIExplanation();
    
    // 停止下拉刷新
    setTimeout(() => {
      wx.stopPullDownRefresh();
    }, 1000);
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    const { questionData } = this.data;
    
    return {
      title: questionData ? `AI解释：${questionData.questionText.substring(0, 20)}...` : 'AI智能题目解释',
      path: '/pages/index/index'
    };
  }
});